home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / share / pyshared / PIL / PcdImagePlugin.py < prev    next >
Text File  |  2006-12-03  |  2KB  |  77 lines

  1. #
  2. # The Python Imaging Library.
  3. # $Id: PcdImagePlugin.py 2134 2004-10-06 08:55:20Z fredrik $
  4. #
  5. # PCD file handling
  6. #
  7. # History:
  8. #       96-05-10 fl     Created
  9. #       96-05-27 fl     Added draft mode (128x192, 256x384)
  10. #
  11. # Copyright (c) Secret Labs AB 1997.
  12. # Copyright (c) Fredrik Lundh 1996.
  13. #
  14. # See the README file for information on usage and redistribution.
  15. #
  16.  
  17.  
  18. __version__ = "0.1"
  19.  
  20.  
  21. import Image, ImageFile
  22.  
  23. ##
  24. # Image plugin for PhotoCD images.  This plugin only reads the 768x512
  25. # image from the file; higher resolutions are encoded in a proprietary
  26. # encoding.
  27.  
  28. class PcdImageFile(ImageFile.ImageFile):
  29.  
  30.     format = "PCD"
  31.     format_description = "Kodak PhotoCD"
  32.  
  33.     def _open(self):
  34.  
  35.         # rough
  36.         self.fp.seek(2048)
  37.         s = self.fp.read(2048)
  38.  
  39.         if s[:4] != "PCD_":
  40.             raise SyntaxError, "not a PCD file"
  41.  
  42.         orientation = ord(s[1538]) & 3
  43.         if orientation == 1:
  44.             self.tile_post_rotate = 90 # hack
  45.         elif orientation == 3:
  46.             self.tile_post_rotate = -90
  47.  
  48.         self.mode = "RGB"
  49.         self.size = 768, 512 # FIXME: not correct for rotated images!
  50.         self.tile = [("pcd", (0,0)+self.size, 96*2048, None)]
  51.  
  52.     def draft(self, mode, size):
  53.  
  54.         if len(self.tile) != 1:
  55.             return
  56.  
  57.         d, e, o, a = self.tile[0]
  58.  
  59.         if size:
  60.             scale = max(self.size[0] / size[0], self.size[1] / size[1])
  61.             for s, o in [(4,0*2048), (2,0*2048), (1,96*2048)]:
  62.                 if scale >= s:
  63.                     break
  64.             # e = e[0], e[1], (e[2]-e[0]+s-1)/s+e[0], (e[3]-e[1]+s-1)/s+e[1]
  65.             # self.size = ((self.size[0]+s-1)/s, (self.size[1]+s-1)/s)
  66.  
  67.         self.tile = [(d, e, o, a)]
  68.  
  69.         return self
  70.  
  71. #
  72. # registry
  73.  
  74. Image.register_open("PCD", PcdImageFile)
  75.  
  76. Image.register_extension("PCD", ".pcd")
  77.